{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第二步：调整树的参数：max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(粗调，参数的步长为2；下一步是在粗调最佳参数周围，将步长降为1，进行精细调整)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T06:41:45.837722Z",
     "start_time": "2018-01-03T06:41:44.470636Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "##  import 必要的模块\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T06:41:55.693595Z",
     "start_time": "2018-01-03T06:41:54.422129Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "data = pd.read_csv(dpath + 'RentListingInquries_FE_train.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T06:41:57.621095Z",
     "start_time": "2018-01-03T06:41:55.876236Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target = pd.read_csv(dpath + 'RentListingInquries_FE_test.csv')\n",
    "target.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T06:41:58.123638Z",
     "start_time": "2018-01-03T06:41:57.924613Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:517: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self.obj[item] = s\n"
     ]
    }
   ],
   "source": [
    "def remove_noise(df):\n",
    "#remove some noise\n",
    "    df= df[df.price < 10000]\n",
    "\n",
    "    df.loc[df[\"bathrooms\"] == 112, \"bathrooms\"] = 1.5\n",
    "    df.loc[df[\"bathrooms\"] == 10, \"bathrooms\"] = 1\n",
    "    df.loc[df[\"bathrooms\"] == 20, \"bathrooms\"] = 2\n",
    "    return df\n",
    "data = remove_noise(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T06:42:00.463615Z",
     "start_time": "2018-01-03T06:42:00.402862Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = data['interest_level']\n",
    "X_train = data.drop('interest_level',axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T06:42:02.334383Z",
     "start_time": "2018-01-03T06:42:01.948684Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化 \n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T06:42:03.938293Z",
     "start_time": "2018-01-03T06:42:03.902765Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "kfold = list(kfold.split(X_train,y_train))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（247），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T06:42:06.097440Z",
     "start_time": "2018-01-03T06:42:06.088662Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:13:40.948918Z",
     "start_time": "2018-01-03T06:42:07.847094Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.61198, std: 0.00394, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.61179, std: 0.00419, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.61148, std: 0.00399, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.60052, std: 0.00536, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.59995, std: 0.00511, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.60038, std: 0.00475, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.60252, std: 0.00548, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.60171, std: 0.00461, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.60079, std: 0.00570, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.61725, std: 0.00645, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.61432, std: 0.00524, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.60910, std: 0.00504, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 3},\n",
       " -0.59995181589394309)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=247,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:13:41.381223Z",
     "start_time": "2018-01-03T07:13:41.350453Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 129.55934534,  123.5925611 ,  114.53831506,  182.02456398,\n",
       "         181.48524389,  179.86246119,  253.03625188,  255.96353817,\n",
       "         259.93549418,  338.64808421,  326.79395766,  252.32174225]),\n",
       " 'mean_score_time': array([ 0.55684843,  0.57312393,  0.4961946 ,  0.73479824,  0.9894279 ,\n",
       "         0.85829062,  1.86621814,  1.7588994 ,  1.83476739,  3.6485044 ,\n",
       "         2.89709215,  1.73244219]),\n",
       " 'mean_test_score': array([-0.61198313, -0.61178979, -0.61147747, -0.60051525, -0.59995182,\n",
       "        -0.60038169, -0.60251791, -0.60170751, -0.60079459, -0.61725383,\n",
       "        -0.61431827, -0.60910351]),\n",
       " 'mean_train_score': array([-0.58610134, -0.5869905 , -0.587435  , -0.51463987, -0.52073803,\n",
       "        -0.52459038, -0.40236517, -0.42491111, -0.43847263, -0.27283355,\n",
       "        -0.32036304, -0.34972137]),\n",
       " 'param_max_depth': masked_array(data = [3 3 3 5 5 5 7 7 7 9 9 9],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_min_child_weight': masked_array(data = [1 3 5 1 3 5 1 3 5 1 3 5],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([10,  9,  8,  3,  1,  2,  6,  5,  4, 12, 11,  7], dtype=int32),\n",
       " 'split0_test_score': array([-0.60427287, -0.6037719 , -0.60387136, -0.59109771, -0.59107366,\n",
       "        -0.59222008, -0.59510093, -0.59539065, -0.59337979, -0.60868468,\n",
       "        -0.60721209, -0.60083832]),\n",
       " 'split0_train_score': array([-0.58932141, -0.58967924, -0.59046624, -0.51551568, -0.52131844,\n",
       "        -0.52536584, -0.40518122, -0.42728126, -0.44041663, -0.27457455,\n",
       "        -0.32114258, -0.35256356]),\n",
       " 'split1_test_score': array([-0.61545018, -0.61602869, -0.61570701, -0.60711445, -0.60615631,\n",
       "        -0.6064227 , -0.60874771, -0.60769752, -0.61023503, -0.62543061,\n",
       "        -0.6228996 , -0.61416677]),\n",
       " 'split1_train_score': array([-0.58362686, -0.58509419, -0.58527506, -0.51291257, -0.51982627,\n",
       "        -0.52287437, -0.40086493, -0.42421009, -0.43745425, -0.26757953,\n",
       "        -0.31503009, -0.34583366]),\n",
       " 'split2_test_score': array([-0.6134355 , -0.61362943, -0.61274725, -0.60159795, -0.60130392,\n",
       "        -0.602601  , -0.60713971, -0.60593924, -0.60344235, -0.62400409,\n",
       "        -0.61586149, -0.61426135]),\n",
       " 'split2_train_score': array([-0.58516788, -0.5859412 , -0.5861033 , -0.51319295, -0.51881157,\n",
       "        -0.52341297, -0.4013837 , -0.42212701, -0.43817431, -0.27130354,\n",
       "        -0.32133152, -0.34724953]),\n",
       " 'split3_test_score': array([-0.61367397, -0.61317013, -0.61221857, -0.6034915 , -0.60291003,\n",
       "        -0.60185263, -0.60461316, -0.60134794, -0.59800228, -0.61509582,\n",
       "        -0.6145432 , -0.60961331]),\n",
       " 'split3_train_score': array([-0.5856458 , -0.58685258, -0.58734801, -0.51571481, -0.5220005 ,\n",
       "        -0.52536898, -0.40265963, -0.42548694, -0.4387227 , -0.27504849,\n",
       "        -0.32241761, -0.35106504]),\n",
       " 'split4_test_score': array([-0.61308518, -0.61235083, -0.61284509, -0.59927688, -0.59831727,\n",
       "        -0.59881393, -0.59698968, -0.59816354, -0.59891483, -0.61305577,\n",
       "        -0.61107628, -0.60663985]),\n",
       " 'split4_train_score': array([-0.58674477, -0.58738531, -0.58798238, -0.51586333, -0.52173337,\n",
       "        -0.52592974, -0.40173639, -0.42545023, -0.43759524, -0.27566165,\n",
       "        -0.3218934 , -0.35189508]),\n",
       " 'std_fit_time': array([  0.60551868,   7.15287858,   0.40080857,   0.6383104 ,\n",
       "          1.16745143,   0.44343305,   1.68884973,   4.09470405,\n",
       "          0.95415546,   1.10361851,   7.97690159,  19.19906328]),\n",
       " 'std_score_time': array([ 0.11378727,  0.08891093,  0.05064822,  0.04473366,  0.23338935,\n",
       "         0.1022145 ,  0.69068736,  0.6799426 ,  0.44727328,  0.73885187,\n",
       "         0.86013362,  0.51946718]),\n",
       " 'std_test_score': array([ 0.00394118,  0.00419223,  0.00399467,  0.00536327,  0.0051105 ,\n",
       "         0.00474695,  0.00547984,  0.00461274,  0.00570009,  0.00645212,\n",
       "         0.00523625,  0.00503778]),\n",
       " 'std_train_score': array([ 0.00189657,  0.00155571,  0.00178518,  0.00130357,  0.0012218 ,\n",
       "         0.00121098,  0.00152487,  0.00170191,  0.00107122,  0.00302922,\n",
       "         0.00270367,  0.00267704])}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:34:04.331716Z",
     "start_time": "2018-01-03T07:34:03.944195Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.599952 using {'max_depth': 5, 'min_child_weight': 3}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n8eLFbNoUmmk7pmOVlpYyatQoRowYwZAhQ7jzzjubdG7TtonPR9p3v0vPBx/khDVv0fWWm6k+dIhv\nfn4Hm8edzq6f/5yS9ettJs4msgDTyrTVAHMkIgNMLJKSknjjjTdYv349ubm5LF++nHfffdejHJq2\nIKFjRzpdcQXfeflljn9uHhlTJlOw9BW2XTKLL6dOY/9f/kJVfn68s3lUsWcw9bjr5Y1s2lnYrMcc\n3KMDd15Q92zOt9xyC1988QXZ2dlMnDiRrl278ve//52ysjKmT5/OXXfdxaFDh5g5cyZ5eXlUVVXx\n85//nN27d7Nz504mTJhA586dWb16ddTjp6enc/311/P666/TsWNH7r33Xn7605+yfft2Hn74YaZO\nncq2bdu47LLLOORWEfz+97/nu9/9LosWLWLu3LmsXLmSb775hjPOOIM1a9bQrVu3w85TUlLCnDlz\n2LRpE4MGDaKkpCS07bXXXuPOO++krKyMfv368ec//5n09HT69OnDJZdcEsr7vHnz2LNnD0uWLOGt\nt97innvuYeHChQDMnz+f6667jvz8fP70pz8xbty4WucXEdLT0wGn6XlFRYU9azExERFSTzqJ1JNO\n4thbb6XwlWXkL1jA7nt/zZ4H/oeMiRPJujiH1FGjEJ/9Rq+P3Z1W5r777qNfv37k5uYyceJENm/e\nzPvvv09ubi7r1q1jzZo1LF++nB49erB+/Xo2bNjA5MmT+eEPf0iPHj1YvXp1ncEF4NChQ4wfP551\n69aRkZHBz372M1auXMmiRYu44447AOjatSsrV67kww8/5IUXXuCHP/whANOnT6dbt27MnTuXq6++\nmrvuuitqcAF47LHHSE1N5aOPPuL2229n3bp1AHz77bfcc889vP7663z44YeMHDmSBx98MLRfhw4d\neP/997nhhhv40Y9+xHe/+12mTp3K/fffT25uLv369QOgsrKS999/n4cffpi77roLgJ07d3LuueeG\njlVVVUV2djZdu3Zl4sSJjB49+gj+ZUx75E9Pp+MlM+k7/+/0XbyIrIsvpujtt9l+xRy+mDyFb//4\nOBV79sQ7m61Wo0owItIROE5VP/IoP61KfSWNlvDaa6/x2muvcdJJJwFQVFTE5s2bGTduHDfeeCM3\n33wz559//mG/3uuTmJjI5MmTARg2bBhJSUkEAgGGDRvGtm3bAOcX/w033EBubi5+v5/PP/88tP/v\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x115751c50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "当'max_depth'= 5, 'min_child_weight'= 3，logless 为 0.599952，比默认参数的logless 0.601257 小了一点，继续调优 'max_depth'和 'min_child_weight'"
   ]
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "nbTranslate": {
   "displayLangs": [
    "*"
   ],
   "hotkey": "alt-t",
   "langInMainMenu": true,
   "sourceLang": "en",
   "targetLang": "fr",
   "useGoogleTranslate": true
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
